package edu.shzu.manage.dao;

import edu.shzu.manage.entity.Role;
import edu.shzu.manage.vo.RoleVo;
import org.apache.ibatis.annotations.*;

import java.util.List;

@Mapper
public interface RoleDao {
    /**
     * 根据ID 查询角色
     * @param roleId
     * @return
     */
    @Select("select * from role where roleId = #{roleId}")
    Role getRoleById(Integer roleId);

    @Select("select * from role")
    List<Role> getRole();

    /**
     * 查询所有角色的权限配置信息
     * @return
     */
    @Select("select r.*,m.menuId,m.menuName from role r,menu m,role_menu rm where r.roleId=rm.roleId and m.menuId=rm.menuId")
    List<RoleVo> getAllRole();

    /**
     * 根据角色Id 查询其对应的所有权限
     * @param roleId
     * @return
     */
    @Select("select menuId from role_menu where roleId=#{roleId}")
    Integer[] getMenuIds(Integer roleId);

    /**
     * 向角色表中插入新的角色
     * @param role
     */
    @Insert("insert into role(roleName,remark) values(#{roleName},#{remark})")
    @Options(useGeneratedKeys=true, keyProperty="roleId", keyColumn="roleId")
    int insertRole(Role role);

    /**
     * 向role_menu表中 插入角色相关权限
     * @param roleId
     * @param menuId
     */
    @Insert("insert into role_menu(roleId,menuId) values(#{roleId},#{menuId})")
    int insertRoleMenu(Integer roleId,Integer menuId);

    /**
     * 删除角色表中的角色
     * @param roleId
     */
    @Delete("delete from role where roleId = #{roleId}")
    int deleteRole(Integer roleId);

    /**
     * 删除角色对应的菜单权限
     * @param roleId
     */
    @Delete("delete from role_menu where roleId = #{roleId}")
    int deleteRoleMenu(Integer roleId);

    /**
     * 更新角色表中的信息
     * @param role
     */
    @Update("update role set roleName=#{roleName},remark=#{remark} where roleId=#{roleId}")
    int updateRole(Role role);

    @Select("select * from role where roleName like concat('%',#{str},'%')")
    List<Role> queryRoles(String str);
}
